/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.Compras;


import Controlador.Bean.Compras.CatalogoData;
import Controlador.Bean.Compras.Departamento;
import Controlador.Bean.Compras.Distrito;
import Controlador.Bean.Compras.Proveedor;
import Controlador.Bean.Compras.Provincia;
import Controlador.Bean.Log.Log;
import Data.config.SessionFac;
import gui.General.Main;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Vector;
import org.apache.ibatis.session.SqlSession;
/**
 *
 * @author LiziTa
 */



public class ServicioProveedor {
    
    
    java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date fecha= new Date();
        String f=sdf.format(fecha);
    
      public void guardar(Proveedor proveedor){
           try(SqlSession sqlsession= SessionFac.SessionFactory().openSession()){
        proveedor.setIdProveedor(obtenerIdSiguienteProveedor());
        sqlsession.insert("Data.Compras.ServicioProveedor.guardar", proveedor);
        sqlsession.commit();
        sqlsession.close();
        
                
        Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"CMPPROVD","Guardar proveedor",f );
         }
        catch(Exception ex){
            ex.printStackTrace();
        }
      
}
            
       public void eliminar(String Id){
       try(SqlSession sqlsession= SessionFac.SessionFactory().openSession()){
        sqlsession.update("Data.Compras.ServicioProveedor.eliminar", Id);
         sqlsession.commit();
        sqlsession.close();
          Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"CMPPROVD","Eliminar proveedor",f );
         }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
      
        
       public int  buscarCat(String Id){
       try(SqlSession sqlsession= SessionFac.SessionFactory().openSession()){
       int cant;
          cant=sqlsession.selectOne("Data.Compras.ServicioProveedor.buscarCat", Id);
         sqlsession.commit();
        sqlsession.close();
         return cant;
         }
        }
       
        public int buscarOC(String id){
       try(SqlSession sqlsession= SessionFac.SessionFactory().openSession()){
       int cant;
          
          cant=sqlsession.selectOne("Data.Compras.ServicioProveedor.buscarOC", id);
         sqlsession.commit();
        sqlsession.close();
        
         return cant;
         }
        }
        public int existeproducto(String id,String prov){
       try(SqlSession sqlsession= SessionFac.SessionFactory().openSession()){
       int cant;
            HashMap<String, String> hm = new HashMap<>();
        
            hm.put("id", "%"+id+"%");
               hm.put("prov", "%"+prov+"%");
          cant=sqlsession.selectOne("Data.Compras.ServicioProveedor.existeproducto", hm);
         sqlsession.commit();
        sqlsession.close();
         return cant;
         }
       
         }
       
           
     public String obtenerIdSiguienteProveedor(){
           try(SqlSession sqlsession= SessionFac.SessionFactory().openSession()){     
         String id= (String)sqlsession.selectOne("Data.Compras.ServicioProveedor.getNextCodigo");
        
        if(id!=null){
        int cod= Integer.parseInt(id.substring(3)) + 1;
        
        String defecto= "000000";
        String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));

        id = (id.substring(0,3).concat(temp));}
        
        else{
        id = "PRV000001"; 
        
        }
           
        return id;}
    }
       
       
      
public String obtenerIdSiguiente(SqlSession sqlSession){
        try(SqlSession sqlsession= SessionFac.SessionFactory().openSession()){
        HashMap<String,Long> hm = (HashMap<String,Long>)sqlsession.selectOne("");
        sqlsession.close();
        Long maxId = hm!=null?hm.get("idproveedor"):Long.parseLong("0");
        maxId++;
        sqlsession.close();
        return ("PRV-"+maxId); }      
    }
    

          
  public List<Proveedor> filtrarProveedor(String id, String razonSocial){
        try(SqlSession sqlsession= SessionFac.SessionFactory().openSession()){
        HashMap<String, String> hm = new HashMap<>();
        //if(id!=null) 
            hm.put("id", "%"+id+"%");
        //if(razonsocial!=null) 
            hm.put("razonSocial", "%"+razonSocial+"%");
        List<Proveedor> data = (List)sqlsession.selectList("Data.Compras.ServicioProveedor.filtrarProveedor", hm);
        sqlsession.close();
          Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"CMPPROVD","Filtrar proveedor",f );
        return data;
        }
    }


    public List<Proveedor> seleccionarTodo(){
       try(SqlSession sqlsession= SessionFac.SessionFactory().openSession()){
        List<Proveedor> data = (List)sqlsession.selectList("Data.Compras.ServicioProveedor.seleccionarTodo");
        sqlsession.close();
          Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"CMPPROVD","Seleccionar proveedor",f );
        return data;
    }
       }
    
     public ArrayList<String> seleccionarFila(String id){
        try(SqlSession sqlsession= SessionFac.SessionFactory().openSession()){
        ArrayList<String> data;
          data = sqlsession.selectOne("Data.Compras.ServicioProveedor.seleccionarFila",id);
        sqlsession.close();
        return data;
    }
        }
    
    
     public void actualizar(Proveedor proveedor){
       try(SqlSession sqlsession= SessionFac.SessionFactory().openSession()){
        sqlsession.update("Data.Compras.ServicioProveedor.actualizar", proveedor);
         sqlsession.commit();
        sqlsession.close();
          Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"CMPPROVD","Actualizar proveedor",f );
    }
       }
     
        
     
        public List<Departamento> getDepartamentos(){
		     try(SqlSession sqlsession= SessionFac.SessionFactory().openSession()){
		List<Departamento> resultados=sqlsession.selectList("Data.Compras.ServicioProveedor.Departamento");
		sqlsession.close();
		return resultados; }
	}
      public List<Provincia> getProvincias(){
		   try(SqlSession sqlsession= SessionFac.SessionFactory().openSession()){
		List<Provincia> resultados=sqlsession.selectList("Data.Compras.ServicioProveedor.Provincia");
		sqlsession.close();
		return resultados; }
	}

      private String guardar(Proveedor proveedor,SqlSession sqlsession){
        String id=null;
        try{
            id=obtenerIdSiguienteProveedor(sqlsession);
            proveedor.setIdProveedor(id);
            sqlsession.insert("Data.Compras.ServicioProveedor.guardar", proveedor);        
        }
        catch (Exception ex){
              ex.printStackTrace();
          }
      return id;
}
     
      public ArrayList<String>  cargaMasivaProveedor(String archivo,SqlSession sqlsession){
        
	BufferedReader br = null;
	String line = "";
	String cvsSplitBy = ",";
        ArrayList<String> codProv= new ArrayList<>();        
	try {
 
		br = new BufferedReader(new FileReader(archivo));
		while ((line = br.readLine()) != null) {
		        // use comma as separator
			String[] datos = line.split(cvsSplitBy);
                        Proveedor prov= new Proveedor();
                        prov.setRazonSocial(datos[0]);                        
                        prov.setRuc(datos[1]);
                        prov.setDireccion(datos[2]);
                        prov.setIdDistrito(datos[3]);
                        prov.setTelefono(Integer.valueOf(datos[4]));
                        prov.setCorreo(datos[5]);
                        prov.setNombresContacto(datos[6]);
                        prov.setApePaternoContacto(datos[7]);
                        prov.setApeMaternoContacto(datos[8]);
                        prov.setTipoDocumentoContacto(datos[9]);
                        prov.setDocumentoContacto(datos[9]);
                        prov.setEstado("1");
                        codProv.add(this.guardar(prov, sqlsession));
                }        
                                                                        
	} catch (Exception e) {
		e.printStackTrace();                
	} finally {            
		if (br != null) {
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}        
       return codProv;
      }
      
      public String obtenerIdSiguienteProveedor(SqlSession sqlsession){                
         String id= (String)sqlsession.selectOne("Data.Compras.ServicioProveedor.getNextCodigo");        
        if(id!=null){
        int cod= Integer.parseInt(id.substring(3)) + 1;
        
        String defecto= "000000";
        String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));

        id = (id.substring(0,3).concat(temp));}
        
        else{
        id = "PRV000001"; 
        
        }
           
        return id;
    }
      
 
    }    